package com.jar.exercise.多线程.join;

/**
 * <div  style="border:2px solid none;margin:20px;padding:15px;font-size:24px;text-align:center;color:aqua;">
 *
 *  有时候我们在主线程中生成了子线程，如果子线程中有进行大量的耗时操作，主线程会比子线程早结束，这也是没有问题的，但是如果主程序在结束之前需要子线程的处理结果，那么就必须要等子线程结束之后才能结束主线程。这个时候我们就可以用join()方法。
 *
 *  </div>
 *
 * @author zhangshun
 * @date 2021/5/18 15:26
 */
public class JoinTest {

    public static void main(String[] args) throws InterruptedException {
        hasJoin();

        noneJoin();

    }

    /**
     *  `i'm master thead.` 打印 一定在  `i'm inner thead , name : t2` 之后,需要 在 join 方法哪等待。
     * @throws InterruptedException 异常
     */
    static void hasJoin() throws InterruptedException {
        Thread t1 = new Thread(() -> {
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("i'm inner thead , name : t2");
        });
        t1.start();
        t1.join();
        System.out.println("i'm master thead.");
    }

    /**
     *  `i'm master thead.` 打印 一定在  `i'm inner thead , name : t2` 之前,无需等待子线程
     */
    static void noneJoin(){
        Thread t1 = new Thread(() -> {
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("i'm inner thead , name : t2");
        });
        t1.start();
        System.out.println("i'm master thead.");
    }


}
